package digui;

public class _01练习 {
    public static void main(String[] args) {
//        System.out.println(f1(5));
//        f2(1, 10);
//        System.out.println();
//        System.out.println(f3(new int[]{11, 1, 2}, 0));
//        System.out.println(reverse("abcd", 3));
//        System.out.println(fib(5));
        System.out.println(f4(10,3));
    }

    //从n个球中取m个球，有多少取法
    static int f4(int n, int m) {
        if (n < m) return 0;
        if (n == m) return 1;
        if (m == 0) return 1;
        return f4(n - 1, m - 1) + f4(n - 1, m);//在其中取了一个，在其中不取那一个
    }

    //打印n的阶乘
    static int f1(int n) {
        if (n == 1) return 1;
        return n * f1(n - 1);
    }

    //打印i-j的数
    static void f2(int i, int j) {
        if (i > j) return;
        System.out.print(i + " ");
        f2(i + 1, j);
    }

    //数组求和
    static int f3(int[] a, int begin) {
        if (begin == a.length - 1) {
            return a[begin];
        }
        return a[begin] + f3(a, begin + 1);
    }

    //翻转字符串
    static String reverse(String s, int end) {
        if (end == 0) {
            return "" + s.charAt(0);
        }
        return s.charAt(end) + reverse(s, end - 1);
    }

    //斐波那契
    static int fib(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        return fib(n - 1) + fib(n - 2);
    }

    //最大公约数
   /* public static int gcd(int a, int b) {
     while (b != 0) {
     int temp = a % b;
     a = b;
     b = temp;
     }
     return a;
     }*/

    static int gcb(int m, int n) {
        if (n == 0) return m;
        return gcb(n, m % n);
    }


}
